package cn.lix.sc.rpc.impl.common.annotations;

import org.springframework.stereotype.Component;

import java.lang.annotation.*;

/**
 * 注解的类会被方法spring容器，并通过{@link cn.lix.sc.rpc.server.impl.controller.RpcController}统一对外提供服务
 * @date 2021/7/15
 * @author lix
 * @email sclx1220@163.com
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface RpcService {
    /**
     * @see Component#value()
     * @return
     */
    String value() default "";
    
    /**
     * 支持的内容类型，默认只支持JSON
     * @return 支持的内容类型数组
     */
    ContentType[] contentTypes() default {ContentType.JSON};
    
    /**
     * 是否启用流式传输支持
     * @return 是否支持流式传输
     */
    boolean enableStreaming() default false;
    
    /**
     * 内容类型枚举
     */
    enum ContentType {
        JSON("application/json"),
        MULTIPART("multipart/form-data"), 
        OCTET_STREAM("application/octet-stream"),
        TEXT_PLAIN("text/plain"),
        XML("application/xml");
        
        private final String mimeType;
        
        ContentType(String mimeType) {
            this.mimeType = mimeType;
        }
        
        public String getMimeType() {
            return mimeType;
        }
    }
}
